//
//  CZComopseTextView+Extension.swift
//  WHWeiBo01
//
//  Created by whitcast on 16/7/21.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

extension CZComposeTextView {
    
    //  根据textview里面富文本获取对应的字符串
    var emoticonString: String {
    
        //  根据指定的范围,遍历我们的富文本
        //  infoDic - 表示遍历到内容
        //  range  - 表示遍历到范围
        //  stop   - 是否停止      a.memory = true
        var result = ""
        self.attributedText.enumerateAttributesInRange(NSMakeRange(0, self.attributedText.length), options: []) { (infoDic, range, _) -> Void in
            
            
            //            print(infoDic["NSAttachment"])
            
            if let attachment = infoDic["NSAttachment"] as? CZTextAttachment {
                //  有图片
                
                let chs = attachment.emoticon!.chs!
                //  拼接表情描述
                result += chs
                
            } else {
                //  文字
                //  获取指定范围内的文字
                let text = self.attributedText.attributedSubstringFromRange(range).string
                result += text
                
            }
            
        }
        return result
        
    
    }
    
    
    
    //  根据表情模型添加富文本
    func insertEmoticon(emoticon: CZEmoticon) {
        //  图片
        if emoticon.type == "0" {
            //            //  获取表情描述
            //            let chs = emoticon.chs!
            //            //  插入内容
            //            textView.insertText(chs)
            
            //  记录上一次的富文本
            let originalAttributedStr = NSMutableAttributedString(attributedString: self.attributedText)
            
            //  代码已经抽取到NSAttributedString+Extension
//            //  1. 获取表情按钮的对应的表情图片
//            let image = UIImage(named: emoticon.path!)
//            //  2. 通过UIImage创建一个文本附件(NSTextAttachment)
//            let attachment = CZTextAttachment()//NSTextAttachment()
//            
//            //  设置图片
//            attachment.image = image
//            //  设置表情模型
//            attachment.emoticon = emoticon
//            //  获取行高,指定大小
//            let fontHeight = self.font!.lineHeight
//            //  设置图片大小
//            attachment.bounds = CGRect(x: 0, y: -4, width: fontHeight, height: fontHeight)
//            //  3.通过NSTextAttachment创建富文本(NSAttributedString)
//            let attributedStr = NSAttributedString(attachment: attachment)
            
            //  通过表情模型生成一个富文本
            let attributedStr = NSAttributedString.attributedStringWithEmoticon(emoticon, font: self.font!)
            
            //  4.给我们的textview设置富文本(attributedText)
            //            originalAttributedStr.appendAttributedString(attributedStr)
            //  获取textview的选中范围
            var range = self.selectedRange
            
            //  根据指定范围替换想要的富文本
            originalAttributedStr.replaceCharactersInRange(range, withAttributedString: attributedStr)
            
            
            
            //  5. 指定富文本字体大小
            originalAttributedStr.addAttribute(NSFontAttributeName, value: self.font!, range: NSMakeRange(0, originalAttributedStr.length))
            
            self.attributedText = originalAttributedStr
            //  每次点击让其光标位置加1, 设置其选中范围的长度为0
            range.location += 1; range.length = 0
            //  根据选中的范围设置光标的位置
            self.selectedRange = range
            
            //  自己发送文字改变的通知
            NSNotificationCenter.defaultCenter().postNotificationName(UITextViewTextDidChangeNotification, object: nil)
            //  自己通过代理对象调用文字改变的函数
            //  ? 判断前面的代理方法是否实现,如果没有实现则不执行后面的代码,否则执行后面代码
            //  目前情况下,我们的代理对象已经实现了代理方法,我们可以对其强制解包, 考虑代码严谨我们建议大家还是 '?'
            self.delegate?.textViewDidChange?(self)
            
            
        } else {
            //  emoji
            let emoji = (emoticon.code! as NSString).emoji()
            //
            self.insertText(emoji)
        }
    
    }

}
